package org.xx.armory.rpc;

import org.xx.armory.bindings.BoundParamCollection;
import org.xx.armory.commons.LifeCycle;
import org.xx.armory.service.Invocation;
import org.xx.armory.service.ServiceContext;

/**
 * 服务的修饰器。
 *
 * @author Haart
 */
public interface Decorator
        extends LifeCycle {
    /**
     * 执行指定的方法。
     *
     * @param invocation
     *         用于实现链式调用的执行器。
     * @param params
     *         执行方法的参数集合，修改此集合的内容可以修改最终执行的方法的参数。
     * @param serviceContext
     *         服务上下文。
     * @return 执行结果。
     * @throws Exception
     *         如果执行方法时出现错误。
     */
    Object execute(
            Invocation invocation,
            BoundParamCollection params,
            ServiceContext serviceContext
    )
            throws Throwable;
}
